Function as a Service (FaaS) is a fast-growing usage model for data centers. FaaS is a category of cloud computing services that provides a computing platform to customers to allow customers to develop, run, and manage application functions without the complexity of building and maintaining the infrastructure typically associated with developing and launching an application. Building an application following this model is one way of achieving a “serverless” architecture and is typically used when building microservices applications.
FaaS enables data centers (e.g., such as those run by cloud service providers) to provide to their customers the capability to select specific functions to execute in the data center and to pay for per function processing. Well-defined functions (e.g., sort, search, matrix operations, etc.) are provided by cloud service providers to customers. In addition, customers can provide pre-programmed modules (e.g., as plugins, virtual machines (VMs) or containers) that are run as functions on data center servers. When these custom functions are both compute intensive and data intensive with small data results, as is typical in applications such as analytics, artificial intelligence (AI), and others, processing of custom functions by the data center becomes inefficient. This is because the data is typically read by the custom functions as they are being executed on the data center compute server CPUs, where the data is processed, and the results of the computations are sent back to the customer's system and/or to storage devices within the data center. Processing by compute server CPUs, data transfers over the network, and heavy usage of memory bandwidth all frequently become bottlenecks to various degrees in such use cases, thus slowing down overall application throughput and increasing response times. Additionally, when customers are paying per processing core usage or per function execution, the typical data center architecture becomes too expensive.
In some scenarios, field programmable gate array (FPGAs) are used to execute the functions. However, the FPGAs are resident in the compute servers. The compute servers control the data flow to and from the FPGAs vis-à-vis mass storage devices in the data center, execute additional processing, and transfer results of the FPGA computations back to the requesting system component. This still results in heavy network and memory bandwidth usage, negatively affecting application performance.